/** @file
  The internal structure and function declaration to construct ENTRY_INDEXER in
  IpSecConfig application.

  Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _INDEXER_H_
#define _INDEXER_H_

typedef struct {
  UINT8    Name[MAX_PEERID_LEN];
  UINTN    Index;    // Used only if Name buffer is filled with zero.
} SPD_ENTRY_INDEXER;

typedef struct {
  EFI_IPSEC_SA_ID    SaId;
  UINTN              Index;
} SAD_ENTRY_INDEXER;

typedef struct {
  EFI_IPSEC_PAD_ID    PadId;
  UINTN               Index;
} PAD_ENTRY_INDEXER;

typedef union {
  SPD_ENTRY_INDEXER    Spd;
  SAD_ENTRY_INDEXER    Sad;
  PAD_ENTRY_INDEXER    Pad;
} POLICY_ENTRY_INDEXER;

/**
  The prototype for the ConstructSpdIndexer()/ConstructSadIndexer()/ConstructPadIndexer().
  Fill in SPD_ENTRY_INDEXER/SAD_ENTRY_INDEXER/PAD_ENTRY_INDEXER through ParamPackage list.

  @param[in, out] Indexer         The pointer to the POLICY_ENTRY_INDEXER union.
  @param[in]      ParamPackage    The pointer to the ParamPackage list.

  @retval EFI_SUCCESS    Filled in POLICY_ENTRY_INDEXER successfully.
**/
typedef
EFI_STATUS
(* CONSTRUCT_POLICY_ENTRY_INDEXER) (
  IN POLICY_ENTRY_INDEXER    *Indexer,
  IN LIST_ENTRY              *ParamPackage
);

extern CONSTRUCT_POLICY_ENTRY_INDEXER mConstructPolicyEntryIndexer[];
#endif
